package com.github.aloxc.plugin.restplus.test.impl;

import com.github.aloxc.plugin.DonotGuard;
import com.github.aloxc.plugin.restplus.test.HttpClientAssertionException;
import com.github.aloxc.plugin.restplus.test.HttpClientTest;
import com.github.aloxc.plugin.restplus.utils.Log;
import com.intellij.util.ThrowableRunnable;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.ArrayList;
import java.util.List;
/**
 * 客户端扩展数据
 * @author leero
 */
@DonotGuard
public class HttpClientExternal {
    @DonotGuard
    private List<HttpClientTest> testList;
    @DonotGuard
    private List<Object> printList;


    public HttpClientExternal() {
        this.testList = new ArrayList<>();
        this.printList = new ArrayList<>();
    }

    public List<HttpClientTest> getTestList() {
        return testList;
    }

    public void setTestList(List<HttpClientTest> testList) {
        this.testList = testList;
    }

    public List<Object> getPrintList() {
        return printList;
    }

    public void setPrintList(List<Object> printList) {
        this.printList = printList;
    }

    /**
     * js中assert回调java的方法，不要删除，不要删除，不要删除，不要删除，不要删除，不要删除，不要删除，不要删除
     * @param name
     * @param runnable
     */
    @DonotGuard
    public void test(@NotNull String name, @Nullable ThrowableRunnable<? extends HttpClientAssertionException> runnable) {
        if (runnable == null) {
            runnable = (() -> {
                throw new HttpClientAssertionException("Test function is not defined");
            });
        }
//        Log.log("HttpClientExternal", "在HttpClientExternal中执行test方法 " + name);
        this.testList.add(new HttpClientNashornTest(name, runnable));
    }

    /**
     * js中assert回调java的方法，不要删除，不要删除，不要删除，不要删除，不要删除，不要删除，不要删除，不要删除
     * @param result
     * @param message
     * @throws HttpClientAssertionException
     */
    @DonotGuard
    public void assertTrue(boolean result, @NotNull String message,String name) throws HttpClientAssertionException {
//        Log.log("HttpClientExternal", "执行断言[HttpClientExternal] " + name + "\t" + message);
        if (!result) {
            throw new HttpClientAssertionException(message);
        }
    }

    /**
     * js中log方法回调java的方法，不要删除，不要删除，不要删除，不要删除，不要删除，不要删除，不要删除，不要删除
     * @param message
     */
    @DonotGuard
    public void print(@NotNull Object message) {
        printList.add(message);
    }

    /**
     * js中log方法回调java的方法，不要删除，不要删除，不要删除，不要删除，不要删除，不要删除，不要删除，不要删除
     * @param func
     */
    @DonotGuard
    public void func(Object func){
//        System.out.println(func);
    }
}